【Arduino学习笔记07】模拟信号的输入与输出 analogRead() analogWrite() map() constrain() | 您所在的位置:网站首页 › arduino uno 输出电压 › 【Arduino学习笔记07】模拟信号的输入与输出 analogRead() analogWrite() map() constrain() |
模拟信号:Arduino中的模拟信号就是0v~5v的连续的电压值
数字信号:Arduino中的数字信号就是高电平(5V)或者低电平(0V),是两个离散的值
模拟信号->数字信号:ADC(模数转换器) ADC是用于将模拟信号转换为数字信号的电路。将输入的模拟信号通过ADC转换为数字信号,处理器才能对其进行处理。 这里讲的模拟输入是指0~5v的电压值。在Arduino上,ADC具有10位分辨率,这意味着它可以通过1,024个数字表示模拟电压。相当于将连续的电压值0~5v映射到离散的数值0~1023。将0 ~ 5V的电压分成1024份(2^10),算出来约为4.882mV的测量精度。即:0~4.882mV之间的电压值映射到数字0,4.883mV~9.764mV之间的电压值映射到数字1......
这里的转换关系如下: 数字i对应的模拟电压区间为:
如果用区间的中位数来代表数字i对应的模拟电压:
模拟输入:analogRead(pin) - 用analogRead()读取到的输入值就是0~1023之间的数值 - pin = 0~5 / A0~A5 模拟输出:analogWrite(pin, outputVal) - pin = 3,5,6,9,10,11(PWM引脚) - outputVal的取值范围:0~255(对应0V~5V)
这里的映射关系比较多,用一个图示说明一下:
这种映射关系可以方便地借助map()函数实现: map(value, fromLow, fromHigh, toLow, toHigh): - value : 要处理的数值,在这里就是指模拟输入端读的数值 - fromLow, fromHigh : 输入的上下限 - toLow, toHigh : 想要映射到的数值范围的上下限 - 这里的fromLow和fromHigh,toLow和toHigh没有明确的大小关系。map函数做的只是得到一个把fromLow映射到toLow,fromHigh映射到toHigh的线性映射关系,不在乎toLow和toHigh哪个大哪个小。 - 返回值:根据得到的线性映射关系将value映射到的那个值
值得注意的是:map()函数并没有限制value的大小必须在fromLow和fromHigh之间,它只是根据得到的线性映射关系来输出一个相对应的值。因此使用map()的时候可能会借助constrain()函数来限制输出值的范围: constrain(value, min, max) :- value < min : return min - value > max : return max - min |
CopyRight 2018-2019 实验室设备网 版权所有 |